/**    
 * @Description: 博客园地址：https://www.cnblogs.com/zumengjie/      
 * @author: 顶风少年   
 * @date: 2021年4月13日 下午4:18:32
 */

package datang.dtdb.reflection;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import datang.dtdb.exceptions.MetaObjectException;

/**
 * 将Map或者是VO属性拆开集中再Map中
 */
public class MetaObject {

	Map<String, Object> data = new HashMap<>();

	/**
	 * parameter或者Map
	 */
	public MetaObject(Object parameter) {
		try {
			if (parameter instanceof Map) {
				// 处理入参是map的情况
				data = (Map<String, Object>) parameter;
			} else {
				// 处理入参是VO
				Class<? extends Object> clazz = parameter.getClass();
				Field[] fields = clazz.getDeclaredFields();
				for (int i = 0; i < fields.length; i++) {
					Field f = fields[i];
					f.setAccessible(true);
					String name = f.getName();
					data.put(name, f.get(parameter));
				}
			}
		} catch (Exception e) {
			new MetaObjectException("创建MetaObject异常", e);
		}
	}

	/**
	 * 根据属性名获取value
	 * */
	public Object getValue(String property) {
		return data.get(property);
	}
}
